]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
calendarMessageList: Remove sections map and use clutter children
authorMarco Trevisan (Treviño) <mail@3v1n0.net>
Sat, 31 Aug 2019 18:41:16 +0000 (20:41 +0200)
committerFlorian Müllner <florian.muellner@gmail.com>
Wed, 16 Oct 2019 15:26:13 +0000 (15:26 +0000)
Now that the calendar message list and the message sections are actors, there's
no need to keep track of the sections in a different Map as we can just use the
native clutter functions to manage the children and access to their properties.

Also cleanup the signal connection/disconnection.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/559

js/ui/calendar.js

index f25687c730332b839ebabf60cc0211babd347612..5b404f6e449133daa0689792f4bed5776e749d2b 100644 (file)
@@ -1083,8 +1083,7 @@ class CalendarMessageList extends St.Widget {
                                             can_focus: true });
         this._clearButton.set_x_align(Clutter.ActorAlign.END);
         this._clearButton.connect('clicked', () => {
-            let sections = [...this._sections.keys()];
-            sections.forEach(s => s.clear());
+            this._sectionList.get_children().forEach(s => s.clear());
         });
         box.add_actor(this._clearButton);
 
@@ -1096,8 +1095,9 @@ class CalendarMessageList extends St.Widget {
                                                vertical: true,
                                                y_expand: true,
                                                y_align: Clutter.ActorAlign.START });
+        this._sectionList.connect('actor-added', this._sync.bind(this));
+        this._sectionList.connect('actor-removed', this._sync.bind(this));
         this._scrollView.add_actor(this._sectionList);
-        this._sections = new Map();
 
         this._mediaSection = new Mpris.MediaSection();
         this._addSection(this._mediaSection);
@@ -1112,46 +1112,26 @@ class CalendarMessageList extends St.Widget {
     }
 
     _addSection(section) {
-        let obj = {
-            destroyId: 0,
-            visibleId: 0,
-            emptyNotifyId: 0,
-            canClearNotifyId: 0,
-            messageFocusedId: 0
-        };
-        obj.destroyId = section.connect('destroy', () => {
-            this._removeSection(section);
-        });
-        obj.visibleId = section.connect('notify::visible', this._sync.bind(this));
-        obj.emptyNotifyId = section.connect('notify::empty', this._sync.bind(this));
-        obj.canClearNotifyId = section.connect('notify::can-clear', this._sync.bind(this));
-        obj.messageFocusedId = section.connect('message-focused',
-            this._onMessageFocused.bind(this));
-
-        this._sections.set(section, obj);
-        this._sectionList.add_actor(section);
-        this._sync();
-    }
+        let connectionsIds = [];
 
-    _removeSection(section) {
-        let obj = this._sections.get(section);
-        section.disconnect(obj.destroyId);
-        section.disconnect(obj.visibleId);
-        section.disconnect(obj.emptyNotifyId);
-        section.disconnect(obj.canClearNotifyId);
-        section.disconnect(obj.messageFocusedId);
+        for (let prop of ['visible', 'empty', 'can-clear']) {
+            connectionsIds.push(
+                section.connect(`notify::${prop}`, this._sync.bind(this)));
+        }
+        connectionsIds.push(section.connect('message-focused', (_s, messageActor) => {
+            Util.ensureActorVisibleInScrollView(this._scrollView, messageActor);
+        }));
 
-        this._sections.delete(section);
-        this._sectionList.remove_actor(section);
-        this._sync();
-    }
+        connectionsIds.push(section.connect('destroy', (section) => {
+            connectionsIds.forEach(id => section.disconnect(id));
+            this._sectionList.remove_actor(section);
+        }));
 
-    _onMessageFocused(_section, messageActor) {
-        Util.ensureActorVisibleInScrollView(this._scrollView, messageActor);
+        this._sectionList.add_actor(section);
     }
 
     _sync() {
-        let sections = [...this._sections.keys()];
+        let sections = this._sectionList.get_children();
         let visible = sections.some(s => s.allowed);
         this.visible = visible;
         if (!visible)
@@ -1169,8 +1149,7 @@ class CalendarMessageList extends St.Widget {
     }
 
     setDate(date) {
-        for (let section of this._sections.keys())
-            section.setDate(date);
+        this._sectionList.get_children().forEach(s => s.setDate(date));
         this._placeholder.setDate(date);
     }
 });